This invention relates to a programmable unit adapted to perform different tasks such as computation and other data processing functions and also input-output control. More specifically, this invention relates to such a programmable unit employing plural levels of sub-instruction sets.
Computer usage has expanded to such a large extent that there is now a market for a complete spectrum of computers for performing a great variety of computational tasks and other data processing applications. At one time, the so-called large computer system was thought of as being adapted primarily for complex mathomatical routines and the small data processing systems were thought mathematical as being adapted primarily for business and accounting routines involving rather simple arithmetic operations being performed on a large batch of data. In more recent years, business applications have become of such a magnitude as to require large size data processing systems, and, conversely, applications have been found for medium and small size data processing systems to handle scientific applications as well as data logging. There is, therefore, a need for a variety of computer processing systems ranging from the very small to the very large each of which can handle not only business and scientific applications but also control of data transmission, data acquisition and the like.
As a greater variety of computer applications were found, different systems were individually tailored for those applications. For those situations in which large scale computational problems were involved, requiring many hundreds or thousands of iterative steps, emphasis was placed both on speed of execution and on the number of data bits that could be handled in a given cycle of instruction execution. For such a situation, the system was designed to handle large data widths and also many of the algorithmic processes required to be performed upon that data were implemented directly in wired circuitry to achieve greater speed of instruction execution. It was mainly because of these considerations that the large scale or scientific computer was so expensive. Where the market demanded a more inexpensive computer, such a computer system was designed with the cost factor in mind, as a result of which the circuits and systems involved were relatively simple and the various algorithms were implemented by the programmer. As a result, the time of execution of the program was relatively slow not only because the system had to carry out each individual stop of the program, but also, because the system was designed to handle data of relatively small widths to conserve the circuitry of the system. Since the designer of both types of systems would have to design and manufacture two different arithmetic-logic units for the separate systems, he would lose the economic advantage that would be found with volume production of but one type of design.
The above disadvantage is also inherent in computer systems which are of sufficient size as to require the control of input-output operations concurrently with control of computational and other logic operations. Such separate I-O control units may resemble and, sometimes even are, general purpose digital computers in their own right, complete with an arithmetic unit and sometimes even a local storage. However, the function and, therefore, the design of the I-O control unit still is different from that of the general purpose computer with which it is associated.
Another disadvantage associated with systems of different designs is that of programming incompatibility between the different systems. Since some routeins were implemented in circuitry in larger size systems, only one instruction was required to be executed in order to perform that routine. On the other hand, in a smaller system, a plurality of such instructions would have to be implemented to carry out the same routine. This lack of program compatibility was even more acute between systems built by different companies since different designers employed different instruction formats which varied in length and also employed different field sizes within the instruction format. To overcome such differences in the "machine languages", a variety of different programming languages were developed among the more common of which are Fortran, Cobal and Algol. Programs written in such programming languages could be encoded and used in different computer systems; however, such programs had to first be translated into the machine language of a particular system which translation performed by an executive program sometimes called a compiler, and, if such an executive program had not been provided for a particular programming language, then the computer user would have to rewrite his program in a language for which the system did have a compiler.
Various types of systems architecture have been devised to minimize both the circuit or hardware incompatibility and also the programming or software incompatibility described above. While minimization has occurred within particular product lines, attempts to minimize incompatibility between various programming languages has really only led to the creation of even more programming languages. Particular architectural techniques which have been employed in the prior art include the design of modular processing units and storage units wherein the capability of the system can be increased by adding additional processing units and the storage capacity of the system can be increased by adding storage units. Other techniques include the design of data path widths of different members of a product line to be multiples of some basic unit segment and adapting the instruction format for the product line also to be multiples of that basic segment.
A particular architectural concept that allowed for more flexibility in computer design and also in computer programming has been the concept of microprograms or microinstructions. Initially, a microinstruction was merely a set of control bits employed within a macroinstruction format. Such control bits were employed to provide corrective measures during the execution of a multiply instruction or shift instruction and the like. This concept then evolved to where the macroinstruction specified the particular routine to be performed, such as the addition of two operands, and the execution of the macroinstructions was through a sequence of executions of microinstructions each of which specified the particular gates to be set at the different sequence times. Since a plurality of macroinstructions could be implemented by a finite set of microinstructions, it was recognized that these same microinstructions could be stored in a separate storage to be addressed in any particular sequence upon the execution of different macroinstructions. It was further recognized that various sequences of microinstructions could be formulated to carry out particular operations and separately stored in any memory. Thus, a great variety of sequences of microinstructions could be created to carry out a great variety of routines, and, when a given computer system was designed to perform particular routines, only those required sequences of microinstructions could be stored to be called forth for execution upon the execution of specific individual macroinstructions.
The concept of microinstruction or microprograms, then, became one of sub-instructional sets which were masked or hidden from the programmer thus simplifying the writing of particular programs by minimizing the number of individual specific steps that had to be called for by the programmer. The concept of microprogramming allowed the computer designer to design a more inexpensive computer system that could provide a great variety of routines to the computer user without the requirement of individual functions being implemented in hard-wired circuitry.
While this concept of sequences of microinstructions or sequences of sub-instructions served to provide the programmer with greater ease of program formulation, and also served to provide the computer designer with a greater flexibility and variety of options in meeting the requirements of particular systems architectural design, the obtainment of circuit compatibility between various member systems of a product line and the obtainment of program compatibility both between various programming languages and between the machine languages of the various systems have not yet been provided by the prior art.